fdt_support.c: Correct linux,initrd-start/end setting
authorTom Rini <[email protected]>
Mon, 20 Jan 2014 22:45:33 +0000 (17:45 -0500)
committerTom Rini <[email protected]>
Mon, 20 Jan 2014 22:45:33 +0000 (17:45 -0500)
The change to add 64bit initrd support broke 32bit initrd support as it
always set 64bits worth of data into the properties, even on 32bit
systems.  The fix is to use addr_cell_len (which already says how much
data is in 'tmp') to set the property, rather than always setting 8.
Thanks to Stephen Warren for pointing out the fix here.

Reported-by: Otavio Salvador <[email protected]>
Signed-off-by: Tom Rini <[email protected]>
common/fdt_support.c

index b9dce994624edff4c75a17a14dae6858005caffd..f9f358e7e8308e17dd76a6268558f45f3fa0d570 100644 (file)
@@ -204,7 +204,7 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force)
        if ((path == NULL) || force) {
                write_cell((u8 *)&tmp, initrd_start, addr_cell_len);
                err = fdt_setprop(fdt, nodeoffset,
-                       "linux,initrd-start", &tmp, sizeof(tmp));
+                       "linux,initrd-start", &tmp, addr_cell_len);
                if (err < 0) {
                        printf("WARNING: "
                                "could not set linux,initrd-start %s.\n",
@@ -213,7 +213,7 @@ int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end, int force)
                }
                write_cell((u8 *)&tmp, initrd_end, addr_cell_len);
                err = fdt_setprop(fdt, nodeoffset,
-                       "linux,initrd-end", &tmp, sizeof(tmp));
+                       "linux,initrd-end", &tmp, addr_cell_len);
                if (err < 0) {
                        printf("WARNING: could not set linux,initrd-end %s.\n",
                                fdt_strerror(err));